/**
 * CoffeeMilk (C) 2010 Amen Hamdan
 * 
 * See the NOTICE file distributed with this work for additional 
 * information regarding copyright ownership.  This file is licenses
 * to you under the Apache License, Version 2.0 (the "License"); you 
 * may not use this file except in compliance with the License.  You 
 * may obtain a copy of the License at
 * 
 *     http://www.apache.org/licenses/LICENSE-2.0
 *     
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 * implied. See the License for the specific language governing 
 * permissions and limitations under the License.    
 * 
 */
package ameen.rtm.lib.request;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.codec.digest.DigestUtils;


@SuppressWarnings("serial")
class RtmRequestParameterHelper extends TreeMap<String, String>{
	private String fSharedSecret	= null;

	public RtmRequestParameterHelper(String apiKey, String sharedSecret, RtmRequestParameters parameters) {
		putAll(parameters);
		fSharedSecret = sharedSecret;
		put("api_key", apiKey);
		put("format", "json");
	}
	
	private String getRtmHashString() {
		StringBuffer retVal = new StringBuffer();
		retVal.append(fSharedSecret);
		for (Map.Entry<String, String> entry : entrySet()) {
			retVal.append(entry.getKey());
			retVal.append(entry.getValue());
  		}

		return DigestUtils.md5Hex(retVal.toString());
	}
	
	public String getRtmRequestString() {
		StringBuffer retVal = new StringBuffer();
		for (Map.Entry<String, String> entry : entrySet()) {
			retVal.append(entry.getKey());
			retVal.append("=");
			try {
				String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
				retVal.append(encodedValue);
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			retVal.append("&");
  		}
		retVal.append("api_sig=" + getRtmHashString());
		return retVal.toString();
	
	}
}
